这是我的代码:
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
问题是当宏试图替换单词时。什么都没发生。昨天我正在努力,一切都很好。今天我试着继续研究这个宏并运行测试。没有。有人可以解释原因吗?我没有改变任何事情。 运行宏时没有错误。只需阅读代码并跳过它。
答案 0 :(得分:2)
我可以给你一条鱼,但我会给你一根钓鱼竿。
当您遇到任何类似问题时,请导航到“开发人员”选项卡并选择“Visual Basic”。找到包含代码的对象,右键单击它,查看代码(或者代码直接在工作表中,然后右键单击+查看工作表选项卡上的代码)。
请记住,在宏的顶部(在声明变量之前)总是添加Option Explicit以便于调试。
通过在代码中反复按F8,您可以逐行执行宏,除非屏幕更新为false,否则您可以在工作表上预览宏的当前结果。您还将知道宏在什么时候不会像您希望的那样运行,并且可以将其缩小到导致问题的部分代码。
答案 1 :(得分:1)
尝试使用Replace()函数代替.Replace
例如
Dim Rng as Range
Set Rng = Range(Cells(rows, col), Cells(rows + c, col)).Offset(1, 0)
Rng.Value = Replace(Rng.Value, "ABCDE", FName)
答案 2 :(得分:0)
在您的代码中,指定您使用的工作簿/工作表:
this_workbook = "myWorkBook.xlsm"
mySheet = "theSheet"
' then specify the range like this
yourRange = "[" & this_workbook & "]" & mySheet & "!B2:G22"
答案 3 :(得分:0)
您还可以使用以下代码指定要使用的范围:
dim ws as worksheet
set ws = ThisWorkBook.sheets(1) 'set the first tab of this work book
然后当您想要与您交互时使用的单元格:
ws.Range("B2:G22").select
此外,如果您想将值粘贴到单元格,那么您不需要选择"它除非你想显示用户。 你的代码:
Range("B2:G22").Select
Selection.Copy
Range(ValDate).Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
可以更改为:
Range("B2:G22").Copy
Range(ValDate).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
答案 4 :(得分:0)
我希望这会有所帮助,即使你想用与我预期不同的方式做事。代码用您的输入FName替换“ABCDE”文本(即使“ABCDE”只是单元格内容的一部分)。 所有更改都应用于原始数据。
您必须先通过编辑指定工作表的名称: sheetname =“ Sheet1 ”
然后通过编辑指定数据范围: v_data = .Range(“ b2:g ”& thelastrow)
最后一行将自动设置为包含任何数据的工作表中的最后一行。
如果您想对代码的行为进行任何修改,请与我们联系。
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