Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1632to1636
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

with mit Objektvariablen

with mit Objektvariablen
22.07.2018 22:48:55
Sabrina
Hallo Leute,
ich versuche meinen Quellcode zu bereinigen und alle .Select Anweisungen zu entfernen.
Aber an dieser Stelle komme ich nicht weiter.
Kann mir jemand weiterhelfen? Habe bislang diesen Code

Windows("Daten.xls").Activate
Sheets("Werte").Select
With Sheets("Werte").Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
Set c = .Find(Geraetenummer, LookIn:=xlValues)
If Not c Is Nothing Then
c.Select
ActiveCell.Select
ActiveCell = Geraetenummer
GoTo weiter
End If
Geraetenummer = GeraeteMax
Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select 'letzte leere zelle
ActiveCell.Select
ActiveCell = Geraetenummer
Selection.Offset(0, 0) = Geraetenummer
GoTo weiter
End With
Ich möchte dies nun optimieren ... aber ich bekomme immmer eine Fehlermeldung.
Kann mir jemand helfen den Quelltext in ein Format mit Obejektvariabeln zu ändern?

Dim wksWerte As Worksheet
Set wksWerte = Workbooks("Daten".xls").Worksheets("Werte")
With wksWerte
end with
Liebe Grüße
Sabbel

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: with mit Objektvariablen
22.07.2018 23:01:03
Werner
Hallo Daniel,
hier
Workbooks("Daten".xls")
gehören nach Daten die Gänsefüßchen nicht hin.
Workbooks("Daten.xls")
Gruß Werner
AW: with mit Objektvariablen
22.07.2018 23:22:52
Sabrina
Oh sorry .. es muss natürlich ohne Anführungseichen sein, aber es funktioniert dennoch nicht :o
Dim wksWerte As Worksheet
Set wksWerte = Workbooks("Daten.xls").Worksheets("Werte")
With wksWerte
end with

AW: with mit Objektvariablen
22.07.2018 23:38:41
Gerd
Hallo Sabrina!
Dim wbDaten As Workbook
Dim wksWerte As Worksheet
On Error Resume Next
Set wbDaten = Workbooks("Daten.xls")
On Error GoTo 0
If wbDaten Is Nothing Then _
Set wbDaten = Workbooks.Open(Filename:="C:/Eigene Dateien/Daten.xls")
Set wksWerte = wshDaten.Worksheets("Werte")
With wksWerte
Set c = .Range("A1:A" & Cells(Rows.Count, 1).End(xlUp)).Find(Geraetenummer, LookIn:= _
xlValues)
If Not c Is Nothing Then
c = Geraetenummer
Else
.Cells(Rows.Count, 1).End(xlUp) = GeraeteMax
End If
End With

Gruß Gerd
Anzeige
AW: with mit Objektvariablen
22.07.2018 23:41:08
Gerd
Dim wbDaten As Workbook
Dim wksWerte As Worksheet
On Error Resume Next
Set wbDaten = Workbooks("Daten.xls")
On Error GoTo 0
If wbDaten Is Nothing Then _
Set wbDaten = Workbooks.Open(Filename:="C:/Eigene Dateien/Daten.xls")
Set wksWerte = wshDaten.Worksheets("Werte")
With wksWerte
Set c = .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp)).Find(Geraetenummer, LookIn:= _
xlValues)
If Not c Is Nothing Then
c = Geraetenummer
Else
.Cells(Rows.Count, 1).End(xlUp) = GeraeteMax
End If
End With
AW: with mit Objektvariablen
23.07.2018 13:26:21
Sabrina
Hallo Hans,
vielen Dank
es funktioniert nicht ganz.
Wenn ich eine Marker auf die Zeile
Set c = .Range("A1:A" & Cells(Rows.Count, 1).End(xlUp)).Find(Geraetenummer, LookIn:= xlValues)
setze und mit dem Courser auf c gehe erscheint "c=Leer"
Aber dennoch wird bei "If Not c Is Nothing Then "
"c = Geraetenummer" ausgeführt.
Liebe Grüße
Sabbel
Anzeige
AW: with mit Objektvariablen
23.07.2018 13:45:44
ChrisL
Hi Sabrina
Der Wert von c siehst du erst nachdem die Find-Zeile ausgeführt wurde. Der Code wird korrekt ausgeführt aber...
Finde die Gerätenummer und ersetze die gefundene Gerätenummer durch die Gerätenummer
= Nullsummenspiel
Wenn ich raten müsste...
Sub t()
Dim wbDaten As Workbook
Dim wksWerte As Worksheet
Dim c As Range
'On Error Resume Next
'Set wbDaten = Workbooks("Daten.xls")
'On Error GoTo 0
'If wbDaten Is Nothing Then _
'Set wbDaten = Workbooks.Open(Filename:="C:/Eigene Dateien/Daten.xls")
' ******* Dummy Testdaten erzeugen *******
Dim Geraetenummer As Long, GeraeteMax As Long
Geraetenummer = 8
GeraeteMax = 5
Set wbDaten = ThisWorkbook
Set wksWerte = wbDaten.Worksheets("Werte")
With wksWerte
If WorksheetFunction.CountIf(.Columns(1), Geraetenummer) = 0 Then _
.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = GeraeteMax
End With
End Sub
cu
Chris
Anzeige
AW: with mit Objektvariablen
23.07.2018 13:53:01
Luschi
Hallo Sabrina,
eine kleine Demodatei deinerseits hätte das Problem schon längst aus der Welt geschaffen.
In dem geposteten Codeschnipsel sind 2-3 Ungenauigkeiten drin und auch der .Find-Befehl wird nicht so aufgerufen, wie es von M$ hier:
https://msdn.microsoft.com/de-de/vba/excel-vba/articles/range-find-method-excel
empfohlen wird (siehe Bemerkungen)
Gruß von Luschi
aus klein-Paris
AW: with mit Objektvariablen
23.07.2018 14:42:26
Sabrina
Hallo Ihr Lieben
Ich habe mal eine Testdatei erstellt.
In der Test.xls gibt man die Werte ein die duch den Button "Speichern" gespeichert werden sollen.
Wenn in der Zelle Gerätenummer ein Wert drinnen steht soll die Zeile überschrieben werden.
Wen die Zelle leer ist soll unten mit fortlaufender Nummmer das Gerät neu eingtragen werden.
https://www.herber.de/bbs/user/122833.zip
Liebe Grüße
Sabbel
Anzeige
AW: with mit Objektvariablen
23.07.2018 19:40:20
Daniel
Hi
hier mal der Code angepasst.
wenn du die Gerätenummer als String deklarierst und das Eingabefeld leer lässt, wird automatisch die nächste freie Zelle in der Spalte gefunden.
Sub Geraet_speichern()
Dim GeraeteNummer As String
Dim GeraeteArt As String
Dim Marke As String
Dim Model As String
Dim wksWerte As Worksheet
Dim GeraetMax As Long, c As Range
GeraeteNummer = Range("Geraetenummer")
GeraeteArt = Range("GeraeteArt")
Marke = Range("Marke")
Model = Range("Model")
On Error Resume Next
Set wksWerte = Workbooks("Werte.xls").Worksheets("geraete")
On Error GoTo 0
If wksWerte Is Nothing Then
MsgBox "Die Datei ""Werte.xls"" ist nicht geöffnet oder es fehlt das Blatt ""geraete""."
Exit Sub
End If
With wksWerte
GeraetMax = Application.WorksheetFunction.Max(.Range("A:A")) + 1
Set c = .Range("A:A").Find(what:=GeraeteNummer, LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
Select Case MsgBox("Die angegebene Gerätenummer konnte nicht gefunden werden:" & vbLf & _
"- JA: Gerät mit der angegebenen Nummer neu anlegen (" & GeraeteNummer & ")" & vbLf & _
"- NEIN: Gerät mit der nächsten Nummer neu anlegen (" & GeraetMax & ")" & vbLf & _
"- ABBRECHEN: Eingabe verwerfen", vbQuestion + vbYesNoCancel)
Case vbCancel
Exit Sub
Case vbNo
GeraeteNummer = GeraetMax
Case vbYes
End Select
Set c = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
If GeraeteNummer = "" Then GeraeteNummer = GeraetMax
c.Resize(1, 4).Value = Array(GeraeteNummer, GeraeteArt, Marke, Model)
End With
wksWerte.Parent.Save
End Sub
hier siehst du auch, wie du das ganze Select- und Activate-frei programmierst.
Gruß Daniel
Anzeige
AW: with mit Objektvariablen
23.07.2018 20:34:23
Sabrina
WOW Daniel Danke .. Perfekt.
Eine Frage habe ich. In der Testdatei habe weitere Werte weggelassen damit nur das Wesentliche drinnen ist. Nun ist in einem Feld ein Datum. Wenn Range"Garantie" leer ist wird in die Tabelle 00:00:00 eingetragen. Was muss ich ändern wenn der Werte leer ist auch ein leeres Feld in die Tabelle Werte.xls geschrieben wird?
Und ich möchte dass am Ende der Methode die Datei Werte.xls ausgeblendet wird.
Ich mache dies mit "Windows("Geraete.xls").Visible = False" geht das auch mit wksWerte?
Hier der angepasse Quellcode
Sub Geraet_speichern()
Dim GeraeteNummer As String
Dim GeraeteArt As String
Dim Marke As String
Dim Model As String
Dim GeraeteTyp As String
Dim GeraeteNr As LongLong
Dim Garantie As Date
Dim wksWerte As Worksheet
Dim GeraetMax As Long, c As Range
GeraeteNummer = Range("Geraetenummer")
GeraeteArt = Range("GeraeteArt")
Marke = Range("Marke")
Model = Range("Model")
GeraeteTyp = Range("GeraeteTyp")
GeraeteNr = Range("GeraeteNr")
Garantie = Range("GeraeteGarantie")
On Error Resume Next
Set wksWerte = Workbooks("Werte.xls").Worksheets("geraete")
On Error GoTo 0
If wksWerte Is Nothing Then
MsgBox "Die Datei ""Werte.xls"" ist nicht geöffnet oder es fehlt das Blatt ""geraete""."
Exit Sub
End If
With wksWerte
GeraetMax = Application.WorksheetFunction.Max(.Range("A:A")) + 1
Set c = .Range("A:A").Find(what:=GeraeteNummer, LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
Select Case MsgBox("Die angegebene Gerätenummer konnte nicht gefunden werden:" & vbLf & _
"- JA: Gerät mit der angegebenen Nummer neu anlegen (" & GeraeteNummer & ")" & vbLf & _
"- NEIN: Gerät mit der nächsten Nummer neu anlegen (" & GeraetMax & ")" & vbLf & _
"- ABBRECHEN: Eingabe verwerfen", vbQuestion + vbYesNoCancel)
Case vbCancel
Exit Sub
Case vbNo
GeraeteNummer = GeraetMax
Case vbYes
End Select
Set c = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
If GeraeteNummer = "" Then GeraeteNummer = GeraetMax
c.Resize(1, 7).Value = Array(GeraeteNummer, GeraeteArt, Marke, Model, GeraeteTyp, GeraeteNr,  _
Garantie)
End With
Windows("Werte.xls").Visible = False
Liebe Grüße Sabbel
Anzeige
AW: with mit Objektvariablen
23.07.2018 20:51:37
Daniel
Hi
wenn du ein leeres Feld in eine Zahlenvariable (und dazu gehört auch eine Variable mit dem Format Date) einliest, bekommt diese Variable den Wert 0.
Beim Rückschreiben müsste man dann eine IF-Abfrage machen, dh wenn Garantie = 0, dann lasse die Zelle leer, ansonsten schreibe ihren Wert in die Zelle.
Da du die Werte nicht einzeln, sondern mit einem Array alle gleichzeitig in Zellen zurückschreibst, musst du das IF ins Array einbauen, das geht über IIF
c.Resize(1, 7).Value = Array(GeraeteNummer, GeraeteArt, Marke, Model, GeraeteTyp, GeraeteNr, IIF(Garantie = 0, "", Garantie))
zur zweiten Frage:
ausblenden musst du wie bisher das Window (mit Windows(Dateiname).visible = false)
das Workbook selbst kann man nicht ausblenden (liegt auch daran, dass jedes Workbook auch mehrere Windows haben kann)
Gruß Daniel
Anzeige
AW: with mit Objektvariablen
23.07.2018 07:42:22
Hajo_Zi
Dein erstes With bezieht sich auf einen Bereich, da zweite nur auf die Tabelle
Dim wksWerte As Worksheet
Set wksWerte = Workbooks("Daten".xls").Worksheets("Werte")
With wksWerte
dim Razelle as Range
razelle= .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
with razelle

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige