2017-07-21 3 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

あなたの問題は、あなたが明示的にyoureのがあまりにも言及何枚述べる必要があるコード

Range("M14:BP14").Copy 

のこの行です。 like:

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

ありがとうが、この部分はうまくいくようです。問題は、この範囲をデータシートにコピーすると、データシート全体がアーカイブワークブックにコピーされることです。見知らぬ人はまだそれを何の誤りもなく名前を変更します。私がコードをステップ実行するか手動で実行すると、全く問題はありません。これは、ボタンを使用して開始した場合にのみ問題です。 – RWGFloyd

+0

wrsphilのコメントは間違いありません。問題は依然として悪い参照名 –

関連する問題