Erreur sous "Abonné hors de scope"

Je suis nouveau dans la programmation VBA Aidez-moi à get la solution.

Mon code doit accepter les files Excel définis par l'user et prendre les valeurs des cellules en tant que journal qui sont colorées. Je reçois une erreur en tant que "Abonné hors de scope"

Public color_Change, color_Recall Private Sub CommandButton1_Click() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim rcell As Range Dim CellData As Ssortingng Dim fso As FileSystemObject Set fso = New FileSystemObject Dim stream As TextStream Set stream = fso.OpenTextFile("D:\Support.log", ForWriting, True) CellData = "" Dim vaFiles As Variant vaFiles = Application.GetOpenFilename() ActiveSheet.Range("B10") = vaFiles Set wb = Workbooks.Open(vaFiles) For Each vaFiles In ActiveWorkbook.Worksheets Worksheets(vaFiles.Name).Activate stream.WriteLine "The name of the Tab Sheet is :" & vaFiles.Name color_Change = getRGB2("A1") 'color_Recall = getRGB2("A2") For Each rcell In vaFiles.UsedRange.Cells arrcolor = color_Change rcell.Interior.Color = getRGB1("A3") For Each color_Recall In ActiveSheet.UsedRange If rcell.Interior.Color = arrcolor Then CellData = Trim(rcell.Value) stream.WriteLine "The Value at location (" & rcell.Row & "," & rcell.Column & ") " & CellData & " " & rcell.Address End If 'End If Next Next stream.WriteLine vbCrLf 'Next 'Next stream.Close MsgBox ("Job Done") End Sub Function getRGB2(ccell) As Ssortingng Dim wkb As Workbook ThisWorkbook.Sheets(Sheet).Activate 'wkb.Activate Dim i As Integer, rng As Range Dim r As Byte, g As Byte, B As Byte Set rng = Range(ccell) With rng.Interior r = .Color Mod 256 g = .Color \ 256 Mod 256 B = .Color \ (CLng(256) * 256) End With getRGB2 = r & "," & g & "," & B End Function Function getRGB1(ccell) As Ssortingng Dim wkb As Workbook ThisWorkbook.Sheets(Sheet).Activate 'wkb.Activate Dim i As Integer, rng As Range Dim r As Byte, g As Byte, B As Byte Set rng = Range(ccell) With rng.Interior r = .Color Mod 256 g = .Color \ 256 Mod 256 B = .Color \ (CLng(256) * 256) End With getRGB1 = r & "," & g & "," & B End Function 

Je ne peux pas répéter votre erreur mais:

  1. Vous n'avez pas besoin d' Activate les feuilles, vous ne pouvez pas parcourir les feuilles si vous qualifiez les fonctions getRGB1 et getRGB2
  2. Vous avez une deuxième boucle en regardant toutes les cellules ( color_Recall ) qui ne semble pas servir à aucune fin

suggérer

 For Each vafiles In ActiveWorkbook.Worksheets stream.WriteLine "The name of the Tab Sheet is :" & vafiles.Name color_Change = getRGB2(vafiles.Range("A1")) For Each rcell In vafiles.UsedRange.Cells arrcolor = color_Change rcell.Interior.Color = getRGB1(vafiles.Range("A3")) If rcell.Interior.Color = arrcolor Then CellData = Trim(rcell.Value) stream.WriteLine "The Value at location (" & rcell.Row & "," & rcell.Column & ") " & CellData & " " & rcell.Address End If Next Next 

Les différences fondamentales entre Subs et Fonctions sont

  • Un sous peut travailler sur des objects
  • Un sous n'a pas de valeur de return
  • Une fonction ne peut pas modifier un object
  • Une fonction renverra habituellement quelque chose Lorsque vous appelez

     ThisWorkbook.Sheets(Sheet).Activate 

    Vous essayez de modifier l'object Workbook qui n'est pas autorisé.

Je ne suis pas certain que ThisWorkbook.Sheets (Sheet) est un object valide, sauf si vous avez défini Sheet comme variable globale.

Une search Google pour

get la couleur rgb excel

a représenté ce résultat

 Function getRGB2(rcell) As Ssortingng Dim C As Long Dim R As Long Dim G As Long Dim B As Long C = rcell.Interior.Color R = C Mod 256 G = C \ 256 Mod 256 B = C \ 65536 Mod 256 getRGB2 = R & "," & G & "," & B End Function 

À partir de http://excel.tips.net/T010179_Determining_the_RGB_Value_of_a_Color.html

 Function getRGB2(ccell) As Ssortingng Dim wkb As Workbook ThisWorkbook.Sheets(Sheet).Activate 

Au lieu de cela, essayez ceci:

 Function getRGB2(ccell) As Ssortingng Dim wkb As Workbook ' or rename this to Dim ThisWorkbook As Workbook Set wkb = ActiveWorkbook ' or rename this to Set ThisWorkbook = ActiveWorkbook wkb.Sheets("Name of the sheet you want").Activate ' or rename this to ThisWorkbook.Sheets("Name of the sheet you want").Activate 

Je pense que votre problème est que vous n'avez pas décélébé ce qu'est-ce wkb / ThisWorkbook, vous l'avez dit, il est variable dans le Dim mais vous n'avez alors rien fait avec ça, vous devez indiquer le code qui fonctionne livre que vous souhaitez utiliser, après cela, vous pouvez l'utiliser dans votre code.

J'espère que cela t'aides

Si vous ne comprenez pas ce que je veux dire, je vais l'expliquer plus en détail si vous le permettez.