2017-07-21 45 views
0

我已经设置了质量检查表,它需要将结果作为一行数据存储在名为“数据”的单独表单中,并将完整检查表的存档版本保存在一个单独的工作簿。 我是VBA的新手,但已经设法得到我需要的工作。当我将宏指定给包含在我的检查表上的按钮时,我的问题就出现了。如果我按下按钮,它会复制错误的表单,并且基本上不会执行手动运行宏时的操作。任何人都可以提出建议吗?分配给按钮时,我的VBA行为会有所不同

感谢

我的代码如下:

Sub SaveForm() 

' SaveForm Macro 
' Saves form data to the Data Sheet 

'Checks for completion of mandatory fields 

If IsEmpty(Range("b3").Value) = True Then 
    MsgBox "Please complete 'Agent Name' before saving" 
    Exit Sub 

ElseIf IsEmpty(Range("b4").Value) = True Then 
    MsgBox "Please complete 'Call ID' before saving" 
    Exit Sub 

ElseIf IsEmpty(Range("b5").Value) = True Then 
    MsgBox "Please complete 'Call Length' before saving" 
    Exit Sub 

ElseIf IsEmpty(Range("D3").Value) = True Then 
    MsgBox "Please complete 'Business Name' before saving" 
    Exit Sub 

ElseIf IsEmpty(Range("D4").Value) = True Then 
    MsgBox "Please complete 'Date of Call' before saving" 
    Exit Sub 

ElseIf IsEmpty(Range("D5").Value) = True Then 
    MsgBox "Please complete 'Time of Call' before saving" 
    Exit Sub 

ElseIf IsEmpty(Range("b7").Value) = True Then 
    MsgBox "Please complete 'Assessor Name' before saving" 
    Exit Sub 

ElseIf IsEmpty(Range("b8").Value) = True Then 
    MsgBox "Please complete 'Date of Assessment' before saving" 
    Exit Sub 


End If 

'Copies a range contained within the "Checksheet" and pastes 
'it into the next available row on the "Data" sheet 

'The reason it is in a straight row as opposed to sporadic cell 
'references is because I have set the sheet up this way for simplicity 

Range("M14:BP14").Copy 

Sheets("Data").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues 
ActiveWindow.ScrollRow = 1 
Workbooks("Call Feedback Form V0.42.xlsm").Sheets("Checksheet").Activate 

Call CopyRenameWorksheet 

Workbooks("Call Feedback Form V0.42.xlsm").Sheets("Checksheet").Activate 

End Sub 

Sub CopyRenameWorksheet() 

'This renames the worksheet based on cell references and archives to another workbook 

Dim ws As Worksheet 
Set wh = Worksheets(ActiveSheet.Name) 
ActiveSheet.Copy After:=Worksheets(Sheets.Count) 
If wh.Range("B3").Value <> "" Then 
ActiveSheet.Name = wh.Range("B3").Value & " " & Format(wh.Range("D4").Value, ("yymmdd")) & " " & wh.Range("B4").Value 
ActiveSheet.Move After:=Workbooks(_ 
"Archived Quality Forms.xlsx").Sheets(1) 

End If 
+0

您的一些代码格式不正确(不是灰色框),但我不确定它应该如何。另外,请尝试提供[MCVE](https://stackoverflow.com/help/mcve)。 – Marein

+0

嗨马林。对不起,我对此完全陌生。 – RWGFloyd

+0

我不确定如何在灰色框中获取所有内容,网站通过这种方式进行格式化。有没有办法调整它? – RWGFloyd

回答

1

我认为你的问题是由于你引用了错误的工作表。当你使用不同的纸张时,确保你总是完全符合资格。

我会

dim ws as worksheet 
set ws = Worksheets("Sheetname") 

启动替补,然后你可以改变所有的范围要像ws.range("A1")

这样,他们总是引用在正确的纸张范围。

我会先检查您的代码,并确保对范围的每个引用都引用工作表和工作表上的范围。

希望它有帮助!

+0

嗨,对不起,我应该真的学会倾听。这工作完美!非常感谢你的帮助。 – RWGFloyd

+0

没问题,如果您对答案感到满意,您能将此标记为正确答案吗? @RWGFloyd – wrslphil

0

你的问题是这行代码

Range("M14:BP14").Copy 

你需要明确说明哪些表参照的youre太。就像

ThisWorkbook.Sheets("Sheet1").Range("M14:BP14").Copy 
+0

谢谢,但这部分似乎工作正常。问题是,一旦它将此范围复制到数据表中,它就会将整个数据表复制到存档工作簿。陌生人仍然重命名它也没有任何错误。当我单步执行代码或手动运行代码时,根本没有问题。这只是通过按钮启动时的一个问题。 – RWGFloyd

+0

wrsphil的评论是正确的。这个问题仍然是错误的命名参考 –

相关问题