Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1188to1192
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

Fehler im Code VBA

Fehler im Code VBA
andreas
Hallo zusammen,
habe hier einen Code bei dem soll in Blatt Bestellungen alle Zeilen die in Spalte "O" Wert "ja" haben markiert werden. Nur die Werte von Spalte "B-P"
Diese werden dann in Blatt Bestellungen-Archiv übertragen, nur Werte und Zahlenformate. In die erste freie Zeile die in Spalte "B" keine Werte hat.
Anschliessend sollen die markierten Werte (nicht die Zeilen) in Blatt Bestellungen gelöscht werden.
bringe das einfach nicht richtig hin und bin deshalb für jede Hilfe dankbar.
Gruß Andreas
Sub Kopieren()
Dim i As Integer
Dim intLastRow As Integer
With Worksheets("Bestellungen")
For i = 12 To .Cells(Rows.Count, 2).End(xlUp).Row
If .Range("O" & i).Value = "ja" Then
.Range("B" & i & ":P" & i).Select
intLastRow = Worksheets("Bestellungen-Archiv").Cells(Rows.Count, 2).End(xlUp).Row
Worksheets("Bestellungen-Archiv").Range("B" & intLastRow + 1).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
End If
Next i
End With
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Fehler im Code VBA
23.11.2010 14:33:20
Ingo
Hallo Andreas,
Probier mal so:
With Worksheets("Bestellungen")
For i = 12 To .Cells(Rows.Count, 2).End(xlUp).Row
If .Range("O" & i) = "ja" Then
.Range("B" & i & ":P" & i).Copy
With Worksheets("Bestellungen-Archiv")
intLastRow = .Cells(Rows.Count, 2).End(xlUp).Row
.Range("B" & intLastRow + 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
End With
End If
Next i
End With
mfG
Ingo Christiansen
AW: Fehler im Code VBA
23.11.2010 23:38:33
dan
Hallo Andreas,
hier mein Code, hoffe es funzt.
Ich habe versuch die Aufgabe in einzelne Funktionen zu zerteilen, falls Du Fragen dazu haben solltest, bin ich bereit sie zu beantworten :-).
Gruss dan, cz.
---------------------------------------------------------------------------------------------
Option Explicit
Private Const SEARCHED_SHEET As String = "Bestellungen"
Private Const ARCHIVE_SHEET As String = "Bestellungen-Archiv"
Private Const SEARCHED_TEXT As String = "JA"
Private Const SEARCHED_COLUMN As String = "O"
Private m_searchInSheet As Worksheet
Private m_archivSheet As Worksheet
Private m_searchInRange As Range
Private m_searchResult As Range
Public Sub Start()
On Error GoTo ErrStart
Initialize
Application.ScreenUpdating = False
Set m_searchResult = FindIgnoreCase(m_searchInRange)
CopyToArchiv m_searchResult, m_archivSheet
ClearResult m_searchResult
Application.ScreenUpdating = True
Exit Sub
ErrStart:
Application.ScreenUpdating = True
MsgBox Err.Description
End Sub

Private Sub Initialize()
Set m_searchInSheet = Worksheets(SEARCHED_SHEET)
Set m_archivSheet = Worksheets(ARCHIVE_SHEET)
Set m_searchInRange = Application.Intersect(m_searchInSheet.UsedRange, m_searchInSheet. _
Columns(SEARCHED_COLUMN))
End Sub

Private Sub ClearResult(result As Range)
' Anschliessend sollen die markierten Werte (nicht die Zeilen) in Blatt Bestellungen gelö _
scht werden.
If (Not result Is Nothing) Then
result.Clear
End If
End Sub

Private Sub CopyToArchiv(data As Range, target As Worksheet)
' Diese werden dann in Blatt Bestellungen-Archiv übertragen, nur Werte und Zahlenformate.
' In die erste freie Zeile die in Spalte "B" keine Werte hat.
If (data Is Nothing) Then Exit Sub
Dim checkInColumn As String
checkInColumn = "B"
Dim targetRow As Integer
targetRow = target.Columns(checkInColumn).Cells(Rows.Count).End(xlUp).Row + 1
Dim targetColumn As Integer
targetColumn = 1
Dim oneRow As Range
For Each oneRow In data.Rows
oneRow.Copy
target.Cells(targetRow, targetColumn).PasteSpecial xlPasteFormats
target.Cells(targetRow, targetColumn).PasteSpecial xlPasteValues
targetRow = targetRow + 1
Next oneRow
End Sub

Private Function FindIgnoreCase(searchIn As Range) As Range
' ... soll in Blatt Bestellungen alle Zeilen die in Spalte "O" Wert "ja" haben markiert  _
werden.
' Nur die Werte von Spalte "B-P"
Dim search
Dim startColumn As Integer
Dim endColumn As Integer
Dim result As Range
Dim oneCell As Range
startColumn = 2
endColumn = 16
Dim resultRow As Range
For Each oneCell In searchIn
Set resultRow = searchIn.Worksheet.Range(searchIn.Worksheet.Cells(oneCell.Row, 2), _
searchIn.Worksheet.Cells(oneCell.Row, 16))
If (Strings.StrComp(SEARCHED_TEXT, Strings.UCase(oneCell.text)) = 0) Then
If (result Is Nothing) Then
Set result = resultRow
Else
Set result = Application.Union(result, resultRow)
End If
End If
Next oneCell
Set FindIgnoreCase = result
End Function

Anzeige
AW: Fehler im Code VBA
23.11.2010 23:44:59
dan
Zu spaet habe ich bemerkt, dass ich etwas uebersehen habe im Code der Funktion, hier ist die 'Final-Version' :-) ...
Private Function FindIgnoreCase(searchIn As Range) As Range
' ... soll in Blatt Bestellungen alle Zeilen die in Spalte "O" Wert "ja" haben markiert  _
werden.
' Nur die Werte von Spalte "B-P"
Dim startColumn As Integer
Dim endColumn As Integer
Dim result As Range
Dim oneCell As Range
startColumn = 2
endColumn = 16
Dim resultRow As Range
For Each oneCell In searchIn
Set resultRow = searchIn.Worksheet.Range(searchIn.Worksheet.Cells(oneCell.Row,  _
startColumn), _
searchIn.Worksheet.Cells(oneCell.Row,  _
endColumn))
If (Strings.StrComp(SEARCHED_TEXT, Strings.UCase(oneCell.text)) = 0) Then
If (result Is Nothing) Then
Set result = resultRow
Else
Set result = Application.Union(result, resultRow)
End If
End If
Next oneCell
Set FindIgnoreCase = result
End Function

Anzeige
AW: Fehler im Code VBA
24.11.2010 10:42:13
andreas
Hallo Dan,
vielen Dank für deine Hilfe, ich bin wirklich begeistert.
ich habe deinen Code in meiner Tabelle eingebaut, funktioniert fast so wie gewünscht. 2 kleine Probleme habe ich noch, beim Löschen der Werte in Bestellungen werden leider auch die Bedingten Formatierungen gelöscht, kannst du das verhindern?
Und beim eintragen der Werte in Archiv sollten die Werte auch ab Spalte "B" eingetragen werden wie bei Bestellungen.
Ich habe die Tabelle angehängt, beim drücken auf Button "sortieren" wird dein Code aufgerufen und nachträglich bei Bestellungen neu sortiert.
https://www.herber.de/bbs/user/72444.xls
Was mich abschliessend noch interessiert ist wo bekomme ich im Internet eine gute Seite um VBA zu erlernen, schliesslich möcht ich ja nicht immer auf die Hilfe anderer angewiesen sein.
Gruß Andreas
Anzeige
AW: Fehler im Code VBA
24.11.2010 11:25:43
dan
Hallo Andreas,
- beim Löschen der Werte in Bestellungen werden leider auch die Bedingten Formatierungen gelöscht
In der Sub ClearResult, aendern result.Clear ==> result.Delete. Ich habe die Prozedure umbenannt, es sollte DeleteResult oder so heissen.
- beim eintragen der Werte in Archiv sollten die Werte auch ab Spalte "B" eingetragen werden
In der Sub CopyToArchiv, aenderen die Variable targetColumn, 1 ==> 2
Also nach den Veraenderungen (nicht getestet):
------------------------------------------------------------------------------------------------------------------------------------
Option Explicit
Private Const SEARCHED_SHEET As String = "Bestellungen"
Private Const ARCHIVE_SHEET As String = "Bestellungen-Archiv"
Private Const SEARCHED_TEXT As String = "JA"
Private Const SEARCHED_COLUMN As String = "O"
Private m_searchInSheet As Worksheet
Private m_archivSheet As Worksheet
Private m_searchInRange As Range
Private m_searchResult As Range
Public Sub Start()
On Error GoTo ErrStart
Initialize
Application.ScreenUpdating = False
Set m_searchResult = FindIgnoreCase(m_searchInRange)
CopyToArchiv m_searchResult, m_archivSheet
DeleteResult m_searchResult
Application.ScreenUpdating = True
Exit Sub
ErrStart:
Application.ScreenUpdating = True
MsgBox Err.Description
End Sub
Private Sub Initialize()
Set m_searchInSheet = Worksheets(SEARCHED_SHEET)
Set m_archivSheet = Worksheets(ARCHIVE_SHEET)
Set m_searchInRange = Application.Intersect(m_searchInSheet.UsedRange, m_searchInSheet. _
Columns(SEARCHED_COLUMN))
End Sub
Private Sub DeleteResult(result As Range)
' Anschliessend sollen die markierten Werte (nicht die Zeilen) in Blatt Bestellungen gelö  _
_
scht werden.
If (Not result Is Nothing) Then
result.Delete
End If
End Sub
Private Sub CopyToArchiv(data As Range, target As Worksheet)
' Diese werden dann in Blatt Bestellungen-Archiv übertragen, nur Werte und Zahlenformate.
' In die erste freie Zeile die in Spalte "B" keine Werte hat.
If (data Is Nothing) Then Exit Sub
Dim checkInColumn As String
checkInColumn = "B"
Dim targetRow As Integer
targetRow = target.Columns(checkInColumn).Cells(Rows.Count).End(xlUp).Row + 1
Dim targetColumn As Integer
targetColumn = 2
Dim oneRow As Range
For Each oneRow In data.Rows
oneRow.Copy
target.Cells(targetRow, targetColumn).PasteSpecial xlPasteFormats
target.Cells(targetRow, targetColumn).PasteSpecial xlPasteValues
targetRow = targetRow + 1
Next oneRow
End Sub
Private Function FindIgnoreCase(searchIn As Range) As Range
' ... soll in Blatt Bestellungen alle Zeilen die in Spalte "O" Wert "ja" haben markiert _
werden.
' Nur die Werte von Spalte "B-P"
Dim startColumn As Integer
Dim endColumn As Integer
Dim result As Range
Dim oneCell As Range
startColumn = 2
endColumn = 16
Dim resultRow As Range
For Each oneCell In searchIn
Set resultRow = searchIn.Worksheet.Range(searchIn.Worksheet.Cells(oneCell.Row, _
startColumn), _
searchIn.Worksheet.Cells(oneCell.Row, _
endColumn))
If (Strings.StrComp(SEARCHED_TEXT, Strings.UCase(oneCell.Text)) = 0) Then
If (result Is Nothing) Then
Set result = resultRow
Else
Set result = Application.Union(result, resultRow)
End If
End If
Next oneCell
Set FindIgnoreCase = result
End Function

------------------------------------------------------------------------------------------------------------------------------------
Gute seite ist https://www.herber.de :-) ... und dann z.B. auch noch http://spreadsheetpage.com und andere.
Am besten kaufe Dir einpaar Buecher ueber Excel VBA, es gibt viele davon: http://www.amazon.de/s/ref=nb_sb_noss?__mk_de_DE=%C5M%C5Z%D5%D1&url=search-alias%3Daps&field-keywords=Excel+VBA
Mfg dan, cz.
Anzeige
AW: Fehler im Code VBA
24.11.2010 11:47:30
andreas
Hallo Dan,
nochmals danke, beim Löschen der Werte nicht "Delete" sondern "ClearContents" dann passts.
Gruß vom Bodensee
Andreas
AW: Fehler im Code VBA
24.11.2010 11:54:06
dan
Aha ja da hast Du Recht, ClearContents :-).
Gruss dan, cz.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige