2016-03-23 7 views
0

arbeiten Dies ist mein Code:VBA Range.Replace Methode nicht

Dim ValDate As String 
Dim FName As String 
Dim rows As Integer 
Dim col As Integer 

ValDate = InputBox("Enter cell range:") 

If ValDate = "" Then 
    Exit Sub 
End If 

r = 1 
c = 20 
rows = Range(ValDate).Row 
col = Range(ValDate).Column 


FName = InputBox("Enter name:") 

Range("B2:G22").Select 
Selection.Copy 
Range(ValDate).Select 
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ 
    SkipBlanks:=False, Transpose:=False 
ActiveSheet.Paste 
Range(ValDate).Offset(0, 1) = FName 


With Range(Cells(rows, col), Cells(rows + c, col)).Offset(1, 0) 
.Replace "ABCDE", FName 
End With 
With Range(Cells(rows, col), Cells(rows + c, col)).Offset(1, 1) 
.Replace "ABCDE", FName 
End With 
With Range(Cells(rows, col), Cells(rows + c, col)).Offset(1, 3) 
.Replace "ABCDE", FName 
End With 

Problem ist, wenn Makro versucht Wort zu ersetzen. Nichts passiert. Gestern habe ich daran gearbeitet und alles war gut. Heute habe ich versucht, weiter an diesem Makro zu arbeiten und zum Test zu laufen. Nichts. Kann jemand erklären warum? Ich habe nichts geändert. Keine Fehler, wenn ich Makro ausführen. Einfach Code lesen und überspringen.

Antwort

0

Ich hoffe, das hilft, auch wenn Sie die Dinge auf eine andere Weise tun wollen, als ich erwartet. Der Code ersetzt "ABCDE" Text mit Ihrer Eingabe FName (auch wenn "ABCDE" nur ein Teil des Zelleninhalts ist). Alle Änderungen werden auf Originaldaten angewendet.

Sie müssen zuerst Blatt Name durch Bearbeitung angeben: Sheetname = "Sheet1"

Dann Datenbereich durch Bearbeitung angeben: V_DATA = .Range ("b2: g" & thelastrow)

Die letzte Zeile wird automatisch als letzte Zeile in Ihrem Blatt mit allen Daten festgelegt.

Wenn Sie Änderungen am Verhalten des Codes wünschen, lassen Sie es mich wissen.

Dim FName As String, sheetname As String 
Dim thelastrow As Integer, dataRow As Integer, dataCol As Integer 
Dim v_data As Variant 

Application.ScreenUpdating = False 

sheetname = "Sheet1" 

With ThisWorkbook.Worksheets(sheetname) 
    thelastrow = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
    v_data = .Range("b2:g" & thelastrow) 

    FName = InputBox("Enter name:") 

    For dataRow = LBound(v_data) To UBound(v_data) 
     For dataCol = LBound(v_data, 2) To UBound(v_data, 2) 
      If InStr(1, v_data(dataRow, dataCol), "ABCDE") <> 0 Then 
       v_data(dataRow, dataCol) = Replace(v_data(dataRow, dataCol), "ABCDE", FName) 
      End If 
     Next dataCol 
    Next dataRow 

    .Range("b2:g" & thelastrow) = v_data 

End With 

Application.ScreenUpdating = True 
+0

Vielen Dank für Ihren Kommentar. Ich habe es gerade gelöst. Einfache Sache: 'Mit Bereich (Zellen (rows, col), Zellen (rows + c, col)). Offset (1, 0) . Ersetze was: =" ABCDE ", Ersetzung: = FName, LookAt: = xlPart, MatchCase: = Wahr '. Jetzt funktioniert jedes Mal :) Ich denke, Makro konnte Wort in Reichweite nicht finden, so dass es überspringt oder nichts tut. –

0

in Ihrem Code angeben, welche Arbeitsmappe/Sheet Sie arbeiten auf:

dim ws as worksheet 
set ws = ThisWorkBook.sheets(1) 'set the first tab of this work book 

dann, wenn Sie wollen:

this_workbook = "myWorkBook.xlsm" 
mySheet = "theSheet" 
' then specify the range like this 
yourRange = "[" & this_workbook & "]" & mySheet & "!B2:G22" 
0

Sie auch den Bereich, den Sie bei der Verwendung dieser Code arbeiten möchten angeben mit Ihnen eine Zelle zu interagieren Sie verwenden:

ws.Range("B2:G22").select 

auch wenn Sie einen Wert in eine Zelle einfügen möchten dann d Sie o muss nicht ausgewählt werden, es sei denn, Sie möchten den Benutzer zeigen. Ihr Code:

Range("B2:G22").Select 
Selection.Copy 
Range(ValDate).Select 
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ 
    SkipBlanks:=False, Transpose:=False 

können geändert werden:

Range("B2:G22").Copy 
Range(ValDate).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ 
    SkipBlanks:=False, Transpose:=False 
+0

Immer noch die gleichen, alle Bereich sind 'ws.Range'. Vielleicht hast du mich falsch verstanden, weil ich nur 'ws.Range (" B2: G22 ") kopiere. Ich arbeite an der I2-Zelle. Lassen Sie mich erklären: rows = 2 col = 9 (I2 = Zellen (2,9)) so 'WithWange (Zellen (2,9), Zellen (22,9)). Offset (1,0) = ws .Range (I2: I22) '. Ich möchte, dass Makro das Wort "ABCDE" im Bereich I2: I22 durch das Wort von Inputbox ersetzt. –

0

Versuchen zu verwenden Ersetzen() Funktion anstelle von .replace

Für Beispiel

Dim Rng as Range 

Set Rng = Range(Cells(rows, col), Cells(rows + c, col)).Offset(1, 0) 

Rng.Value = Replace(Rng.Value, "ABCDE", FName) 
+0

Fehler 13: Typenkonflikt beim Versuch ausführen Ersetzen Funktion –

2

konnte ich geben Du bist ein Fisch, aber ich werde dir stattdessen eine Angelrute geben.

Wenn Sie jemals irgendwelche ähnliche Probleme passieren, auf Ihre Registerkarte Entwickler navigieren und Visual Basic wählen. Suchen Sie das Objekt, das Ihren Code enthält, klicken Sie mit der rechten Maustaste darauf, zeigen Sie den Code an (oder wenn sich der Code direkt in Ihrem Arbeitsblatt befindet, dann klicken Sie einfach mit der rechten Maustaste auf + den Code auf Ihrem Tab anzeigen). Explicit am Anfang Ihrer Makro

Denken Sie daran, immer eine Option hinzufügen (vor Deklaration von Variablen) zur einfacheren Fehlersuche.

Durch mehrmaliges F8 in Ihrem Code Drücken Sie Ihre Makro Zeile für Zeile ausführen und wenn die Bildschirmaktualisierung falsch ist, können Sie die aktuellen Ergebnisse des Makros auf dem Blatt eine Vorschau. Sie wissen auch, an welcher Stelle sich das Makro nicht so verhält, wie Sie es möchten, und Sie können es auf einen Teil des Codes eingrenzen, der Probleme verursacht.

+0

Dies ist mein Makro von mir von Anfang an erstellt, so dass ich Visual Basic verwenden muss. Option Explicit ist standardmäßig eingerichtet und ich debugge mein Makro mit F8 die ganze Zeit, um zu sehen, ob Makro gute Variable verwenden. So kommentieren Sie hier nicht ... Kein Fehler und kein Problem mit dem Code. Kann einfach nicht verstehen, warum Makro-SKIPS mit. Code codieren. Ersetze nichts. –

Verwandte Themen