Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1180to1184
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zelleninhalt in eine Variable einlesen

Zelleninhalt in eine Variable einlesen
Rüdiger
Hallo Ihr Spezialisten,
ich habe da ein Problem.
Ich möchte aus dem Tabellenblatt "Liste" verschiedene Zellen in verschiedenen Spalten in Strings auslesen lassen und diese dann über VBA zusammenfügen.
Das mit dem zusammenfügen der einzelnen Strings bekomme ich hin, nur wie bekommen ich die Zellinhalte in die Strings?
Schon mal vielen Dank!
Gruß Rüdiger
AW: Zelleninhalt in eine Variable einlesen
12.10.2010 18:20:42
BoskoBiati
Hallo,
String=cells(1,1)

oder
String=Range("A1")

zusammenfügen der einzelnen Strings bekomme ich hin
würde ich dann aber so machen:
string= cells(4,4) & ", " &cells(1,1)
usw.
Gruß
bosko
AW: Zelleninhalt in eine Variable einlesen
12.10.2010 18:45:52
Rüdiger
Hallo BoskoBiati,
leider klappt da etwas nicht.
Hier das VBA Objekt.
Sub Urkunde()
Dim MyBox
MyBox = MsgBox("Sind Urkunden im Drucker eingelegt?", vbYesNo)
If MyBox = vbYes Then
'Dein Code
'Urkunde öffnen
Worksheets("Urkunde").Activate
ActiveSheet.Unprotect
a = 0
Dim i As Integer
For i = 11 To 13 Step 1
Range("b42").Select: ActiveCell.Formula = "='Tabelle 1'!au" & CStr(i) 'Platz
Range("b44").Select: ActiveCell.Formula = "='Tabelle 1'!ad2" 'Was + WK
Range("b46").Select: ActiveCell.Formula = "='Tabelle 1'!aw" & CStr(i) 'Name

'Einlesen von Zeile bei der hinten 'Platz steht, wenn es möglich ist, sollte es auch ein  _
fortlaufender String sein, siehe oben!b>
String11 = Range("au11")
'Druckroutine
Stop 'ActiveWindow.SelectedSheets.PrintOut copies:=1
'Löschroutine
Range("b42").Select: Selection.ClearContents
Range("b44").Select: Selection.ClearContents
Range("b46").Select: Selection.ClearContents
Next i
'Arbeitsblatt öffnen
Worksheets("Tabelle 1").Activate ': Range("A2").Select - Zeigt dabei Laufzeitfehler an!
ActiveSheet.Protect
Else
MsgBox "Abbruch"
End If
End Sub
Das fett heschriebene ist der von dir geschriebene und von mir umgeänderter Eintrag.
Wenn ich das Macro laufen Lasse, kommt die Fehlermeldung:
Fehler beim Kombilieren; Erwartet: Bezeichner.
Vielen Dank
Gruß Rüdiger
Ich hoffe, dass Du dem Macro folgen kannst!
Gruß Rüdiger
Anzeige
AW: Zelleninhalt in eine Variable einlesen
12.10.2010 20:55:32
fcs
Hallo Rüdiger,
einen wirklichen Syntaxfehler hab ich in deiner Prozedur nicht gefunden. Allerdings kannst du auf die
.Select : Selection.
Kombinationen verzichten.
Außerdem muss du nicht unbdeingt die Werte durch Eintrag einer Formel ins Blatt "Urkunde" übernehmen. Du kannst die Werte direkt eintragen.
Generell arbeitet es sich beim Programmieren von Zelladressen in Schleifen mit Cells einfacher als mit Range. Man braucht nicht die Zelleadresse als String zusammenbasteln, sondern kann direkt mit Zeile und Spalte als nummerische Werte arbeiten, auch wenn es manchmal etwas mühselig ist die Nummer einer Spalte zu ermitteln, wenn Spalten wie AW oder AU angsprochen werden sollen.
Gruß
Franz
Sub Urkunde()
Dim MyBox, wksUrkunde As Worksheet, wksTab1 As Worksheet
Dim i As Long, a As Long, String11 As String
MyBox = MsgBox("Sind Urkunden im Drucker eingelegt?", vbYesNo)
If MyBox = vbYes Then
Set wksUrkunde = Worksheets("Urkunde")
Set wksTab1 = Worksheets("Tabelle 1") 'Tabelle mit Daten - Namen ggf. anpassen
'Dein Code
'Urkunde öffnen
With wksUrkunde
.Activate
.Unprotect
a = 0  'überflüssig ?
For i = 11 To 13 Step 1
.Range("b42").Value = wksTab1.Cells(i, 47) 'Platz - Spalte AU
.Range("b44").Value = wksTab1.Range("ad2")          'Was + WK
.Range("b46").Value = wksTab1.Cells(i, 49) 'Name - Spalte AW
'Einlesen von Zeile bei der hinten 'Platz steht, wenn es möglich ist, _
sollte es auch ein _
fortlaufender String sein, siehe oben!b>
'Beispiel für Zusammenfügen eines Textes aus mehreren Zellen.
With wksTab1
String11 = .Cells(i, 47) & " " & .Cells(i, 48) & " " & .Cells(i, 49)
End With
'Druckroutine
.PrintPreview         'Seitenvorschau
'         .PrintOut copies:=1   'Drucken
'Löschroutine
.Range("b42").ClearContents
.Range("b44").ClearContents
.Range("b46").ClearContents
Next i
.Protect 'Urkundenblatt wieder schützen
End With
'Arbeitsblatt öffnen
wksTab1.Activate ': Range("A2").Select - Zeigt dabei Laufzeitfehler an!
wksTab1.Protect 'Warum Tabelle 1 schützen?
Else
MsgBox "Abbruch"
End If
End Sub

Anzeige
AW: Zelleninhalt in eine Variable einlesen
13.10.2010 14:18:34
Rüdiger
Hallo BoskoBiati,
Du mußt das Macro schon so lassen wie es ist, denn sonst werden Div Tabellenblätter nicht angesprochen.
Die Tabellenblätter sind generell geschützt, da auch andere Kollegen darin rumschreiben werden und die keine Formeln löschen sollten!
Ich hole die Daten aus dem Arbeitsblatt "Tabelle 1".
Siehe bei "Platz, Was + WK und Name.
Die Daten werden im Arbeitsblatt "Urkunde" rein geschrieben und dann das komplette Arbeitsblatt in eine im Drucker befindliche Urkunde eingedruckt.
Ich glaube ich habe mich da etwas schwer ausgedrückt.
Ich möchte das was in der Zeile "Range("b46").Select: ActiveCell.Formula = "='Tabelle 1'!ao" & CStr(i) 'Name" in b46 in dem Arbeitsbaltt "Urkunde" eingtragen wird in einem String haben.
Da CStr(i) ja laut For Next Schleife ein CStr("11") (bis 14) ist, möchte ich den Inhalt in einer anderen Schleife haben, um mit dem Text nachher weiter zu arbeiten!
Ist das jetzt von mir besser verständlich?
Hier nochmal die Routine
Sub Urkunde()
Dim MyBox
MyBox = MsgBox("Sind Urkunden im Drucker eingelegt?", vbYesNo)
If MyBox = vbYes Then
'Urkunde öffnen
Worksheets("Urkunde").Activate
ActiveSheet.Unprotect
Dim i As Integer
For i = 11 To 13 Step 1
Range("b42").Select: ActiveCell.Formula = "='Tabelle 1'!am" & CStr(i) 'Platz
Range("b44").Select: ActiveCell.Formula = "='Tabelle 1'!ad4" 'Was + WK
Range("b46").Select: ActiveCell.Formula = "='Tabelle 1'!ao" & CStr(i) 'Name
'Druckroutine
Stop
'ActiveWindow.SelectedSheets.PrintOut copies:=1
'Löschroutine
Range("b42").Select: Selection.ClearContents
Range("b44").Select: Selection.ClearContents
Range("b46").Select: Selection.ClearContents
Next i
ActiveSheet.Protect
'Arbeitsblatt öffnen
Worksheets("Tabelle 1").Activate
Else
MsgBox "Abbruch"
End If
End Sub
Für Verbesserung bin ich immer zu haben. Nur bitte sei so nett und schreibe mir dann auf warum und was diese Verbesserungen machen. Denke bitte daran ich bin in VBA ein Laie!
Gruß Rüdiger
Anzeige
AW: Zelleninhalt in eine Variable einlesen
14.10.2010 05:12:08
fcs
Hallo Rüdiger,
wenn du die während des Druckens eingelesenen Daten in einer anderen Prozedur zur Verfügung haben willst, dann müssen die Daten in einer als Public (dann im gesamten VBA-projekt verfügbar) oder als Private (dann im Modul verfügbar) deklarierten Variablen gespeichert werden. Da du die Daten aller Schleifendurchläufe speichern willst, muss dies ein Daten-Array mit einer entsprechenden Zeilen und Spaltenzahl sein.
Ansonsten kann man in Prozeduren in 99% aller Fälle auf Select, Selection und Activate verzichten. Diese sind eigentlich nur erforderlich, um dem Anwender am Ende eines Makros eine bestimmte Sicht auf eine Tabelle anzuzeigen.
Wenn in einem Makro mehrere Tabellen und ggf. Arbeitsmappen angesprochen werden sollen, dann deklariert man am besten entsprechende Objekt-Variablem für die Tabellen und Arbeitsmappen und weist ihnen mit Set-Anweisungen die Objekte zu. Das erleichtert Lesen und Pflege des VBA-Prozeduren.
Mit "With Objekt" kürzt man die Länge des Code-Textes ein. Alle Objekte und Methoden/Eigenschaften, die mit einem vorangestellten Punkt beginnen beziehen sich immer auf das nächste oberhalb in einer With-Anweisung angegebene Objekt. Dabei kann man ähnlich wie bei For-Next-Schleifen mehrere With Objekt-End With-Abschnitte in einander schachteln.
Gruß
Franz
'Deklaration Datenarray zum Merken der während des Druckens eingelesenen Daten
Public arrDaten() As String
Sub Urkunde()
Dim MyBox, wksUrkunde As Worksheet, wksTab1 As Worksheet, sTabelle As String
Dim i As Long, j As Long
MyBox = MsgBox("Sind Urkunden im Drucker eingelegt?", vbYesNo)
If MyBox = vbYes Then
'Variablen für die Tabellenblätter in der Prozedur setzen
Set wksUrkunde = Worksheets("Urkunde")
sTabelle = "Tabelle 1" 'Name der Tabelle mit den Daten
Set wksTab1 = Worksheets(sTabelle)
'Dein Code
'Urkunde öffnen
With wksUrkunde
.Activate
.Unprotect
'Datenarray für spätere Auswertung dimensionieren
ReDim arrDaten(11 To 13, 1 To 3)
For i = 11 To 13 Step 1
'Werte aus Tabelle 1 per Formel einlesen und  Werte in Datenarray übernehmen
With .Range("b42")
.Formula = "='" & sTabelle & "'!am" & CStr(i) 'Platz
arrDaten(i, 1) = .Text
End With
With .Range("b44")
.Formula = "='" & sTabelle & "'!ad4" 'Was + WK
arrDaten(i, 2) = .Text
End With
With .Range("b46")
.Formula = "='" & sTabelle & "'!ao" & CStr(i) 'Name
arrDaten(i, 3) = .Text
End With
'Druckroutine
Stop
'ActiveWindow.SelectedSheets.PrintOut copies:=1
'Löschroutine
.Range("b42").ClearContents
.Range("b44").ClearContents
.Range("b46").ClearContents
Next i
.Protect 'Urkundenblatt wieder schützen
End With
'Arbeitsblatt öffnen
wksTab1.Activate
Else
MsgBox "Abbruch"
End If
End Sub
'Beispiel für Auswertung der beim Drucken gemerkten Daten
Sub PlazierungsListe()
Dim sMsgText As String, iIndex As Long
On Error GoTo Fehler
sMsgText = "Plazierungen" & vbLf
For iIndex = LBound(arrDaten) To UBound(arrDaten)
sMsgText = sMsgText & vbLf & arrDaten(iIndex, 1) & " " & arrDaten(iIndex, 2) _
& " " & arrDaten(iIndex, 3)
Next
MsgBox sMsgText, vbInformation + vbOKOnly, "Test Datenanzeige"
'Daten-Array löschen
Erase arrDaten
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case 9 'Datenarray ist leer
MsgBox "Es wurden noch keine Urkunden gedruckt!", _
vbInformation + vbOKOnly, "Plazierungsliste"
Case Else
MsgBox "fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub

Anzeige
AW: Zelleninhalt in eine Variable einlesen
14.10.2010 08:48:06
Rüdiger
Hallo Hallo Franz,
ich konnte Dein Macro nur bis zu:
.Range("b42").ClearContents
testen.
Dann kam die Fehlermeldung:
Laufzeitfehler 1004
Kann Teil einer verbundenen Zelle nicht ändern
Warum.
Danke Dir vielmals.
Gruß Rüdiger
Ps kann ich noch ein Problem fragen?
.MergeArea.ClearContents
14.10.2010 09:00:53
Matthias
Hallo
probier mal so:
.Range("b42").MergeArea.ClearContents
bitte an einer Kopie testen
Gruß Matthias
AW: .MergeArea.ClearContents
14.10.2010 09:29:42
Rüdiger
Hallo Franz,
klappt, nur ich benötige die Daten aus den fett und kursiv gemachten Zellen!
Nicht die Zahlen aus i!
'Werte aus Tabelle 1 per Formel einlesen und Werte in Datenarray übernehmen
With .Range("b42")
.Formula = "='" & sTabelle & "'!au" & CStr(i) 'Platz
arrDaten(i, 1) = .Text
End With
With .Range("b44")
.Formula = "='" & sTabelle & "'!ad4" 'Was + WK
arrDaten(i, 2) = .Text
End With
With .Range("b46")
.Formula = "='" & sTabelle & "'!aw" & CStr(i) 'Name
arrDaten(i, 3) = .Text
End With
Hier nochmals das ganze Macro!
'Deklaration Datenarray zum Merken der während des Druckens eingelesenen Daten
Public arrDaten() As String
Sub Urkunde()
Dim MyBox, wksUrkunde As Worksheet, wksTab1 As Worksheet, sTabelle As String
Dim i As Long, j As Long
MyBox = MsgBox("Sind Urkunden im Drucker eingelegt?", vbYesNo)
If MyBox = vbYes Then
'Variablen für die Tabellenblätter in der Prozedur setzen
Set wksUrkunde = Worksheets("Urkunde")
sTabelle = "Tabelle 1" 'Name der Tabelle mit den Daten
Set wksTab1 = Worksheets(sTabelle)
'Dein Code
'Urkunde öffnen
With wksUrkunde
.Activate
.Unprotect
'Datenarray für spätere Auswertung dimensionieren
ReDim arrDaten(11 To 13, 1 To 3)
For i = 11 To 13 Step 1
'Werte aus Tabelle 1 per Formel einlesen und  Werte in Datenarray übernehmen
With .Range("b42")
.Formula = "='" & sTabelle & "'!au" & CStr(i) 'Platz
arrDaten(i, 1) = .Text
End With
With .Range("b44")
.Formula = "='" & sTabelle & "'!ad4" 'Was + WK
arrDaten(i, 2) = .Text
End With
With .Range("b46")
.Formula = "='" & sTabelle & "'!aw" & CStr(i) 'Name
arrDaten(i, 3) = .Text
End With
'Druckroutine
Stop
'ActiveWindow.SelectedSheets.PrintOut copies:=1
'Löschroutine
.Range("b42").MergeArea.ClearContents
.Range("b44").MergeArea.ClearContents
.Range("b46").MergeArea.ClearContents
Next i
.Protect 'Urkundenblatt wieder schützen
End With
'Arbeitsblatt öffnen
wksTab1.Activate
Else
MsgBox "Abbruch"
End If
End Sub
'Beispiel für Auswertung der beim Drucken gemerkten Daten
Sub PlazierungsListe()
Dim sMsgText As String, iIndex As Long
On Error GoTo Fehler
sMsgText = "Plazierungen" & vbLf
For iIndex = LBound(arrDaten) To UBound(arrDaten)
sMsgText = sMsgText & vbLf & arrDaten(iIndex, 1) & " " & arrDaten(iIndex, 2) _
& " " & arrDaten(iIndex, 3)
Next
MsgBox sMsgText, vbInformation + vbOKOnly, "Test Datenanzeige"
'Daten-Array löschen
Erase arrDaten
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case 9 'Datenarray ist leer
MsgBox "Es wurden noch keine Urkunden gedruckt!", _
vbInformation + vbOKOnly, "Plazierungsliste"
Case Else
MsgBox "fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub

Gruß Rüdiger
Anzeige
AW: .MergeArea.ClearContents
16.10.2010 21:51:02
fcs
Hallo Rüdiger,
ich weiss jetzt nicht was du noch willst.
Die Daten aus den "fetten" Zellen werden in das Datenarray eingelesen.
Die MsgBox die mit dem Makro Plazierung angezeigt wird ist ja nur ein Beispiel, wie die gemerkten Daten weiter verarbeitet werden können. Das muss du jetzt in ähnlicher Form für dich anpassen. Da du ja bisher nichts darüber angegeben hast, was du mit den gemerkten Daten anfangen willst, konnte ich dir natürlich auch nicht direkter helfen.
Gruß
Franz
AW: .MergeArea.ClearContents
17.10.2010 10:01:18
Rüdiger
Hallo Franz,
wie ich angkreutzt habe, habe ich sehr wenig Ahnung von VBA.
Wo genau stehen die Daten? in welchem Buchstaben oder so?
Wenn ich das Macro laufen lasse, kommt die Fehlermeldung:
fehler-Nr.: 13
Typen unverträglich
OK
Noch einen schönen Sonntag wünscht Rüdiger
Anzeige
AW: .MergeArea.ClearContents
17.10.2010 12:17:37
fcs
Hallo Rüdiger,
so bist/kommst du keinen Schritt weiter. Wenn du nicht wenigstens mal beschreibst, was du mit den gemerkten Daten machen willst, kannst du auch keine detailliertere Hilfe erwarten
Die Daten stehen nach Durchlauf des Makros "Urkunde" im Speicher von Excel in dem definierten Daten-Array "arrDaten", z.B. in folgender Form:
1               Test               Name 01
2               Test               Name 02
3               Test               Name 03

Die Zeilen und Spalten-Nummern um die einzelnen Daten aufzurufen richten sich nach den Festlegungen in der Redim-Anweisung
ReDim arrDaten(11 To 13, 1 To 3)
Somit kannst du die einzelnen Daten wie folgt ansprechen und ggf. eben auch in einer For-Next-Schleife abarbeiten.
Zeile    Werte aus AU    Wert aus AD4    Werte aus AW
11    arrDaten(11,1)    arrDaten(11,2)    arrDaten(11,3)
12    arrDaten(12,1)    arrDaten(12,2)    arrDaten(12,3)
13    arrDaten(13,1)    arrDaten(13,2)    arrDaten(13,3)

Gruß
Franz
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige