- 10 Fev 2021 às 00:15
#62090
Segue outra solução. Veja se aproveita.
Preparação:
1. no intervalo nomeado existente "categorias" (planilha Lista) coloque os nomes corretos das planilhas, para isso rode o código abaixo que irá elaborar na coluna A a lista com os nomes das planilhas, em seguida copie e cole em "categorias" (célula B4), menos os dois primeiros nomes. A Validação existente naquele intervalo será excluída.
Sub ListaPlanilhas()
Dim ws As Worksheet
[A:A] = ""
For Each ws In ThisWorkbook.Worksheets
Cells(Rows.Count, 1).End(3)(2) = ws.Name
Next ws
End Sub
2. para carregar o Form atual utilize o código abaixo no Módulo1, assim você poderá efetuar outras operações como ativar outra planilha, inserir dados, etc., enquanto o Form estiver carregado.
Sub CarregaForm()
UserForm1.Show vbModeless
End Sub
3. no atual módulo do Form exclua o código Private Sub ComboBox1_Change() que lá existe pois não será necessário e poderá interferir nas operações.
4. no módulo do Form cole uma cópia do código abaixo.
Option Explicit
Dim Buttons() As New BtnClass
Private Sub UserForm_Initialize()
Dim BuCont As Integer, ctl As Control
For Each ctl In UserForm1.Controls
If TypeName(ctl) = "CommandButton" Then
If ctl.Caption Like "LIMPAR*" Or ctl.Caption Like "EMITIR*" Or ctl.Caption Like "VER*" Then Exit Sub
BuCont = BuCont + 1
ReDim Preserve Buttons(1 To BuCont)
Set Buttons(BuCont).ButtonGroup = ctl
End If
Next ctl
End Sub
5. insira um Módulo de Classe, assim: no menu do editor de VBA clique em Inserir | Módulo de classe; renomeie de BtnClass (para renomear clique no menu Exibir | Janela Propriedades e no campo name cole BtnClass.
Na janela do módulo de classe cole uma cópia do código abaixo.
Option Explicit
Public WithEvents ButtonGroup As MsForms.CommandButton
Private Sub ButtonGroup_Click()
Dim LR As Long, LC As Long
If UserForm1.ComboBox1.Text = "" Then MsgBox " NO CAMPO 'Selecione a Leitura'" & vbLf & "SELECIONE A PLANILHA QUE RECEBERÁ OS DADOS": Exit Sub
With Sheets(UserForm1.ComboBox1.Text)
If .[A1] = "" Then
.[A1] = CDbl(ButtonGroup.Caption)
Else: LR = .[A:J].Find(what:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
LC = .Cells(LR, Columns.Count).End(1).Column
If LC = 10 Then
.Cells(LR + 1, 1) = CDbl(ButtonGroup.Caption)
Else: .Cells(LR, LC + 1) = CDbl(ButtonGroup.Caption)
End If
End If
End With
End Sub
Done!
funcionamento - a partir de qualquer planilha carregue o Form .
Selecione na ComboBox o nome da planilha que receberá os dados e vá clicando nos botões do Form para inserir os valores de pH. Os valores serão inseridos na planilha selecionada na ComboBox, a partir de A1, por linhas, de A até J.
Se você quiser, poderemos ajustar o código para lançar os dados diretamente na planilha Laudo, conforme o seu primeiro post.
Osvaldo
Quatro coisas que odeio: preguiçosos, políticos, Google planilhas e Outlook

Anexe arquivos diretamente no fórum:
+ Resposta / Adicionar um anexo / Selecione o arquivo
CÉLULAS MESCLADAS PODEM AFETAR FÓRMULAS E MACROS.