2016-05-12 133 views
1

いくつかのことをチェックし、条件付き書式をトリガーするコード を返すVBA関数を書いています。 を除いてすべてが正常に機能し、数式で#valueエラーが発生することがよくあります。これは、式(数千)を含むすべての セルでこれを行います。別のブックを開くと、エラーは と表示されます。 別のブックを開くときに時々起こる。ユーザー定義関数の#valueエラー

機能はここにある:エラーが原因倍セルU2にあるかもしれないことを疑っ

Function jjcheck(STDTRow As Integer, cuCOL As Integer, cuMax As Integer, trmEnd As Integer, trmEMax As Integer, worksheetSRC As String, lstCTCT As Date) As Variant 
    'use in spreadsheet =jjcheck(B2,Variables!$G$4,Variables!$G$2,Variables!$F$2,"SRM",U2) 
    '=jjcheck(B2,Variables!$G$4,Variables!$F$4,Variables!$G$2,Variables!$F$2,"SRM",IF(ISBLANK(U2),TODAY(),U2)) 
    Dim V() As String, dayMax As Integer, lookup As Date, theDiff As Integer, lstContact As String 
    V = Split(ActiveWorkbook.ActiveSheet.Cells(1, 2).Value, "-"): dayMax = V(1): theDiff = 256 
    lookup = lstCTCT 
    theDiff = DateDiff("d", lookup, Date): lstContact = "" 
    If theDiff > dayMax Then lstContact = "Alert" 
    Dim STDcu As Integer, STtrmEnd As Date, daysTOtrmend As Integer 
    STDcu = ActiveWorkbook.Worksheets(worksheetSRC).Cells(STDTRow, cuCOL).Value 
    STtrmEnd = ActiveWorkbook.Worksheets(worksheetSRC).Cells(STDTRow, trmEnd).Value 
    daysTOtrmend = DateDiff("d", Date, STtrmEnd) 
    If STDcu < cuMax And daysTOtrmend < trmEMax Then 
     jjcheck = "CHECK" & lstContact 
    ElseIf daysTOtrmend < trmEMax/2 Then 
     jjcheck = "ETerm" & lstContact 
    Else 
     jjcheck = "" & lstContact 
    End If 
End Function 

は空で、私 は私が助けるように見えなかったことIF(ISBLANK(U2),TODAY(),U2)lstCTCTのために入れたものを変更しました。 The image shows what happens in the worksheet あなたはそれを与えることができる任意の洞察に感謝します。

+1

、ワークシートの名前(VBAエディタで)を与え、それらを直接参照する - 'wksHome。範囲(...) '。 'ActiveWorkbook'の問題は、あなたが最後にやりとりしたブックに応じて変わるということです。 – CallumDA

答えて

0

これが何か違いがある場合はお知らせください。主な変更点は ActiveWorkbookからThisWorkbookです。あなたではなく、より良いActiveWorkbook`または `よりも` ThisWorkbook`を使用することを検討すべきである(いくつか他の人がちょうど整頓する)

Function jjcheck(STDTRow As Integer, cuCOL As Integer, cuMax As Integer, trmEnd  As Integer, trmEMax As Integer, worksheetSRC As String, lstCTCT As Date) as Variant 

'use in spreadsheet =jjcheck(B2,Variables!$G$4,Variables!$G$2,Variables!$F$2,"SRM",U2) 
'=jjcheck(B2,Variables!$G$4,Variables!$F$4,Variables!$G$2,Variables!$F$2,"SRM",IF(ISBLANK(U2),TODAY(),U2)) 

Dim V() As String, lstContact As String 
Dim dayMax As Integer, theDiff As Integer, STDcu As Integer, daysTOtrmend As Integer 
Dim lookup As Date, STtrmEnd As Date 

STDcu = ThisWorkbook.Worksheets(worksheetSRC).Cells(STDTRow, cuCOL).Value 
STtrmEnd = ThisWorkbook.Worksheets(worksheetSRC).Cells(STDTRow, trmEnd).Value 
daysTOtrmend = DateDiff("d", Date, STtrmEnd) 
V = Split(ThisWorkbook.ActiveSheet.Cells(1, 2).Value, "-"): dayMax = V(1): theDiff = 256 
lookup = lstCTCT 
theDiff = DateDiff("d", lookup, Date): lstContact = vbNulltring 

If theDiff > dayMax Then lstContact = "Alert" 

If STDcu < cuMax And daysTOtrmend < trmEMax Then 
    jjcheck = "CHECK" & lstContact 
ElseIf daysTOtrmend < trmEMax/2 Then 
    jjcheck = "ETerm" & lstContact 
Else 
    jjcheck = vbNullString & lstContact 
End If 
End Function 
+0

ありがとうございました。それはそうするようです。良い説明も。ありがとう。 – TMZ

+0

問題ありません@TMZあなたの質問に答えたことがうれしかったら、この回答の横にあるチェックマークを選択して受け入れてください。 – CallumDA

+0

ありがとうございました。私は投票しようとしましたが、私は新しいメンバーですからできませんでした。とにかく、答えは大部分のために素晴らしく働いた。新しいスプレッドシートを開いたときにエラーが表示されなくなりました。しかし、それはまだ時々出現する(あまり頻繁ではない)。私はそれが同じシート内のいくつかの "無関係な"マクロが実行されるたびに表示されている疑いがあります。私は他のマクロがその機能と同じ問題を抱えていると思っていますが、この "無関係な"機能にエラーが表示されるのが不思議です。 – TMZ

関連する問題