Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: google Spreadsheet - Macro

google Spreadsheet - Macro
08.11.2013 13:51:24
e-mo
Hallo alle zusammen,
ich habe in google ein online spreadsheet erstellt...damit ich das mit anderen usern teilen kann. Habe eine Tabelle erstellt..wo die users ihren status per Auswahlmöglichkeit ihren Status angeben können, mit "Ja" und "Nein"...eigentlich sehr simple...
unter dieser Tabelle habe ich ein bereich eingeführt...eine Art Kommentarfeld...wo die user pro Zeile ihren kommentar eintragen können
d.h. ab Zeile 29 Spalte A, können die User ihren Namen per Dropdown wählen, Spalte B...ihren kommentar eingeben
d.h. auch...dass jedesmal..wenn jemand ein kommentar geben möchte...die nächste zeile anwählen muss etc etc...somit ist der neueste Kommentar also immer ganz unten...was ich nicht mehr will.
Jetzt habe ich im Feld K28 ein Bild/Button hinzugefügt "Kommentar hinzufügen"..dass beim anklicken dieses Buttons, eine neue Zeile 29 hinzugefügt wird, und die vorhandenen Kommentare somit alle um eine Zeile nach unten rutschen. Das Dropdown mit den Namen soll erhalten bleiben... :-)
Bitte um Hilfe...
danke,
e-mo

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: google Spreadsheet - Macro
11.11.2013 09:36:02
fcs
Hallo e-mo,
in bin mir nicht sicher, ob Makros unter google Spreadsheet fuktionieren.
Ein entsprechendes Makro unter Excel sieht wie folgt aus. Dieses musst du dann deinem Bild/Button zuweisen bzw. von dem zugehörigen Ereignismakro starten.
Gruß
Franz
'Code in einem Allgemeinen Modul
Sub NeueKommentarzeile()
Dim wks As Worksheet
Dim Zeile As Long
Set wks = ActiveSheet 'oder Activeworkbook.Worksheets("Tabelle1")
Zeile = 29
With wks
With .Rows(Zeile)
If Application.WorksheetFunction.CountA(.Cells) > 0 Then
.Copy
.Insert shift:=xlShiftDown
.Offset(-1, 0).ClearContents
End If
End With
.Cells(Zeile, 1).Select
End With
End Sub

Anzeige
AW: google Spreadsheet - Macro
11.11.2013 13:31:14
e-mo
Hallo fcs...
vielen Dank, aber leider hat es nicht funktioniert.
Habe aber in deren library folgendes gefunden:

function InsertThreeEmptyRows() {
var sheet = SpreadsheetApp.getActiveSheet("Badminton");
var firstRowPosition = sheet.getActiveCell().getRow();
for (var i = 0; i 
könntest du das so "umbauen"?
Danke,
e-mo

Anzeige
AW: google Spreadsheet - Macro
11.11.2013 15:47:48
fcs
Hallo e-mo,
ich kenne mich mit der Syntax nicht aus. Betrachte meine Anpassung also als gut gemeinten Versuch.
"Badminton" muss du dann durch den tatsächlichen Namen des Tabellenblatts ersetzen.
Gruß
Franz
function KommentarzeileEinfuegen() {
var sheet = SpreadsheetApp.getActiveSheet("Badminton");
var firstRowPosition = 29;
for (var i = 0; i 

Anzeige
AW: google Spreadsheet - Macro
12.11.2013 09:02:11
e-mo
Morgen fcs...and alle anderen :-)
so, ich habe das eingebunden, und das mit "Badminton" war bereits von mir eingefügt...hat aber leider nicht so funktioniert, so dass ich Badminton rausnehmen musste...dann hat es mehr oder weniger funktioniert....
es ist noch nicht so, wie ich das gerne hätte..
z.B.
Derzeit ist aber Spalte A29 eine Datenüberprüfung drin (Liste), wo man den User per Dropdown aussuchen kann. die Zellen B29 bis J29 sind verbunden.
Wenn ich das Script ausführe, dann fügt es mir eine blanke Zeile, wo die Formate nicht mehr vorhanden sind, d.h. Datenprüfung und verbundene Zellen.
Habe ein script zur Validierung gefunden, habe versucht das einzubinden..bin aber irgendwie gescheitert..
 // Set the data validation for cell A1 to require a value from B1:B10, with a dropdown menu.
var cell = SpreadsheetApp.getActive().getRange('A1');
var range = SpreadsheetApp.getActive().getRange('B1:B10');
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
cell.setDataValidation(rule);
Habe das so ergänzt:
function Kommentar() {
var sheet = SpreadsheetApp.getActiveSheet();
var firstRowPosition = 29;
for (var i = 0; i 
resultat = funktioniert nicht :-) das script added trotzdem nur eine leere zeile...
und die zellen zusamenfügen habe ich auch noch nicht gefunden
script für verbinden der zellen:
 var sheet = SpreadsheetApp.getActiveSheet();
// The code below will 2-dimensionally merge the cells in A1 to B3
sheet.getRange('A1:B3').merge();
kann man die code teile zusammenfügen zu einen code?
danke schonmal vorab,
e-mo

Anzeige
AW: google Spreadsheet - Macro
12.11.2013 13:16:49
fcs
Hallo e-mo,
ich hab mal versucht mich ein wenig in die Google-Spreadsheet-Scriptsprache einzulesen.
Danach sollte das folgende Script funktionieren. Es funktioniert dann ähnlich wie mein Excel-Makro.
Gruß
Franz
function Kommentar() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
//Blatt für Kommentareinträge setzen
var sheet = ss.getSheetByName("Blattname");
//Blatt für Kommentareinträge aktivieren
sheet.activate();
var firstRowPosition = 29;
// Leerzeile vor Zeile 29 einfügen
sheet.insertRowBefore(firstRowPosition);
//Kopieren von alter Zeile 29 in neue Zeile 29
var Zeile = sheet.GetRange(firstRowPosition + 1, 1, 1, sheet.getmaxcolumns());
Zeile.copyTo(sheet.getRange(firstRowPosition, 1));
//Löschen der Werte in neue Zeile 29.
var Zeile = sheet.GetRange(firstRowPosition, 1, 1, sheet.getmaxcolumns());
Zeile.clear({contentsOnly: true});
sheet.getRange(firstRowPosition, 1).activate();
};

Anzeige
AW: google Spreadsheet - Macro
12.11.2013 14:32:10
e-mo
Hallo Franz,
habe dein script dort hineinkopiert.
Eine Zeiel wurde eingefügt, aber nur der "standardausgang", d.h. kein dropdown..und die zellen sind auch noch nicht verbunden.
außerdem erhalte ich auch bei der ausführung folgender fehler:
"TypeError: Cannot find function GetRange in object Sheet."
e-mo

Anzeige
AW: google Spreadsheet - Macro
12.11.2013 14:16:39
e-mo
Hallo alle zusammen,
habe jetzt etwas rumgespielt...und folgendes geschafft:
- verbindung von Zellen
- einfügen einer Zeile
und zwar hiermit:
function Kommentar() {
var sheet = SpreadsheetApp.getActiveSheet();
var firstRowPosition = 29;
for (var i = 0; i 
Leider funktioniert die referierte Validierung noch nicht, und ich bekomme auch noch zusätzlich folgenden Fehler: "TypeError: Cannot find function getSheetByName in object Sheet."
e-mo

Anzeige
AW: google Spreadsheet - Macro
12.11.2013 15:08:04
fcs
Hallo e-mo,
da hat die Macht der Gewohnheit bei Excel zugeschlagen.
In den Beispelen die ich gefunden hab finden sich für Stringwerte sowohl ' als auch " als Einfassungszeichen.

probiere mal in der Forme
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Blattname');

Gruß
Franz

Anzeige
AW: google Spreadsheet - Macro
13.11.2013 11:01:57
e-mo
Hallo Franz,
ich glaube dein Feedback und mein feedback haben sich überkreuzt....habe nicht mitbekommen, dass du ein script geschickt hast.
Habe im nachgang dein script auch getestet...ging leider auch nicht...
zu deinem letzten feedback, galt:
probiere mal in der Forme
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Blattname');
zu deinem script oder das script was ich da zusammengebastelt habe?
zu der abänderung erhalte ich folgende Meldung:
"TypeError: Cannot find function GetRange in object Sheet."
Dann hatte ich irgendwann noch eine meldung mit "...cannot...activate NULL".. (kann den fehler irgendwie nicht reproduzieren...
e-mo

Anzeige
AW: google Spreadsheet - Macro
13.11.2013 13:59:42
e-mo
Hallo Franz...
es hat endlich geklapp :-)
vielen Dank für den Support!
e-mo
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Google Spreadsheet Makros: So fügst du Kommentare hinzu


Schritt-für-Schritt-Anleitung

Um ein Makro in deinem Google Spreadsheet zu erstellen, das eine neue Kommentarzeile hinzufügt, befolge diese Schritte:

  1. Öffne dein Google Spreadsheet in dem du das Makro erstellen möchtest.

  2. Klicke auf "Erweiterungen" > "Apps Script".

  3. Lösche den Standardcode und füge folgenden Code ein:

    function Kommentar() {
       var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
       var firstRowPosition = 29;
       // Füge eine leere Zeile vor der angegebenen Zeile ein
       sheet.insertRowBefore(firstRowPosition);
       // Kopiere die Werte aus der alten Zeile
       var Zeile = sheet.getRange(firstRowPosition + 1, 1, 1, sheet.getMaxColumns());
       Zeile.copyTo(sheet.getRange(firstRowPosition, 1));
       // Lösche die Inhalte in der neuen Zeile
       sheet.getRange(firstRowPosition, 1, 1, sheet.getMaxColumns()).clear({ contentsOnly: true });
       sheet.getRange(firstRowPosition, 1).activate();
    }
  4. Speichere dein Skript.

  5. Füge einen Button hinzu, um das Makro auszuführen:

    • Klicke auf "Einfügen" > "Zeichnung".
    • Erstelle eine Schaltfläche und klicke auf "Speichern und schließen".
    • Klicke auf die Schaltfläche, wähle die drei Punkte und dann "Skript zuweisen". Gib Kommentar ein.
  6. Teste das Makro, indem du auf den Button klickst. Eine neue Zeile sollte hinzugefügt werden.


Häufige Fehler und Lösungen

  • Typfehler: Cannot find function GetRange in object Sheet
    Stelle sicher, dass du getRange korrekt schreibst, da JavaScript zwischen Groß- und Kleinschreibung unterscheidet.

  • Dropdowns und Formatierungen gehen verloren
    Wenn du nur eine leere Zeile hinzufügst, kopiere die Formatierungen vorher. Der Code oben sollte dies automatisch übernehmen.

  • Das Skript läuft nicht
    Überprüfe, ob du die richtige Berechtigung für das Skript hast. Manchmal musst du das Skript autorisieren, bevor es funktioniert.


Alternative Methoden

  1. Google Sheets Makros aufzeichnen: Du kannst auch Google Sheets verwenden, um ein Makro direkt aufzuzeichnen. Klicke auf „Erweiterungen“ > „Makros“ > „Makro aufzeichnen“ und folge den Anweisungen.
  2. Nutzung von Google Apps Script: Du kannst komplexere Skripte schreiben, um auch andere Funktionen wie das Duplizieren von Zellen oder das Verbinden von Zellen (z. B. sheet.getRange('A1:B1').merge();) zu implementieren.

Praktische Beispiele

  • Beispiel für das Hinzufügen eines Dropdowns:
    Um ein Dropdown in Zelle A29 einzufügen, kannst du folgenden Code verwenden:

    var range = sheet.getRange('A29');
    var rule = SpreadsheetApp.newDataValidation().requireValueInList(['User1', 'User2'], true).build();
    range.setDataValidation(rule);
  • Verbundene Zellen:
    Um Zellen zu verbinden, kannst du merge() verwenden:

    sheet.getRange('A29:B29').merge();

Tipps für Profis

  • Optimiere dein Skript, indem du Funktionen modularisierst, damit du sie an mehreren Stellen verwenden kannst.
  • Nutze Trigger: Setze Trigger, um Skripte automatisch bei bestimmten Aktionen auszuführen, wie z. B. beim Öffnen des Dokuments oder beim Ändern von Zellen.
  • Verwende Kommentare im Code, um die Lesbarkeit zu erhöhen und die Funktionalität zu erklären.

FAQ: Häufige Fragen

1. Funktionieren Excel-Makros in Google Sheets?
Nein, Excel-Makros sind nicht mit Google Sheets kompatibel. Du musst Google Apps Script verwenden.

2. Wie kann ich Duplikate in Google Sheets anzeigen?
Du kannst die Funktion =UNIQUE(A:A) verwenden, um Duplikate in einer Spalte anzuzeigen.

3. Gibt es eine Möglichkeit, ein Google Sheets Makro zu exportieren?
Ja, du kannst den Code aus dem Apps Script Editor kopieren und in ein anderes Spreadsheet einfügen.

4. Wie kann ich ein Dropdown-Menü in Google Sheets erstellen?
Verwende die Datenvalidierung. Gehe zu „Daten“ > „Datenvalidierung“ und wähle „Liste aus einem Bereich“ oder „Liste von Elementen“ aus.

5. Was ist der Unterschied zwischen Google Sheets und Excel?
Google Sheets ist eine cloudbasierte Anwendung, während Excel lokal installiert ist. Beide haben unterschiedliche Funktionen und Skriptsprachen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige