Ir ao conteúdo
  • Cadastre-se

Marcus Casanova Nogueira

Membro Júnior
  • Posts

    19
  • Cadastrado em

  • Última visita

Tudo que Marcus Casanova Nogueira postou

  1. Minoso, Ele executa o for todo. Se eu pedir pra abir 32 programas, ele vai abrir uma atras da outra, ficando com 32 paginas abertas. Esse problema até pode ser contornável se o usuário tiver tempo pra deixar o pc dedicado a esses programas haha A maneira que achei pra sub não continuar foi colocar um MSGBOX. Isso porque o proximo passo da sub leria os dados obtidos pelos .exe abertos. como eles abrem rápido e a rotina continuava, ou seja, ja tentava ler os dados desses .exe, eles estavam em branco pois nao tinham rodado ainda. Agora, o passo seguinte da sub só é executado quando o botao do msgbox é apertado. Não é a solução mais prática, pois o usuário precisa estar atento ao fim dos .exe. Mas por enquanto é a solução que encontrei hehe Abraços
  2. Olá (novamente), pessoal! Estou criando uma macro que executa um .exe. É um arquivo simples, que faz alguns calculos. No entanto, este programa, quando acaba seus calculos, exige que a tecla "ENTER" seja apertada para fecha-lo (ou simplesmente clicar no "X" da aba). Meus problemas: Pretendo abrir vários arquivos desses por vez (o usuário escolheria essa quantidade); -->> atualmente só consigo abrir todos ao mesmo tempo (mais de 30, por exemplo, o que fica complicado pro pc realizar); Abertos esses programas, preciso saber como fecha - los depois. No entanto, só posso fecha-los depois que o programa acabar de rodar ou os cálculos não convergirem. o código que estou usando é esse: Const SW_SHOW = 1Const SW_SHOWMAXIMIZED = 3Public Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long Sub Rodar.exe() Dim RetVal As Long For i = 1 To range("a1") Step 1 nome = i On Error Resume Next RetVal = ShellExecute(0, "open", "C:\Users\marcus\Desktop\" & nome & "\arquivo.exe", "", _ "C:\Users\marcus\Desktop\" & nome, SW_SHOWMAXIMIZED)next iEnd sub Pensei em usar um delay ou algo do tipo, mas não consegui usar os comando que achei na net. (por exemplo: ele vai abrindo até " if i =múltiplo de 8 then delay 10 minutos, else, next i). Pra fechar ja tentei usar windows("tanana").close mas não deu certo. Abraços Marcus
  3. Minoso, contornei esse problema deixando os dados da aba ''asa.in" na aba "principal" e a cada iteração eu crio a "asa.in" e copio os dados la. Assim ela pode ser excluída sem problemas, embora acrescente alguns cálculos a mais para o programa. Abraço
  4. Opa! Como estava só testando o código, os arquivos são abas quaisquer, mas estão aí no anexo! Abraço kkkk.rar
  5. Minoso, mesmo deixando o código assim: Sub ExecutarSalvarTXT()Dim NovoArquivoXLS As WorkbookDim nome As StringApplication.DisplayAlerts = FalseSheets("asa.in").Selectnome = Cells(1, 1).Value 'Cria um novo arquivo excel Set NovoArquivoXLS = Application.Workbooks.Add ActiveWorkbook.SaveAs ("C:\Users\marcus\Desktop" & "\" & "1"), xlOpenXMLWorkbookMacroEnabled 'Copia a planilha para o novo arquivo criado Windows("kkk.xlsm").Activate Sheets("asa.in").Select Sheets("asa.in").Copy Before:=Workbooks("1.xlsm").Sheets(1) Windows("1.xlsm").Activate 'Salva o arquivo ActiveWorkbook.SaveAs Filename:="C:\Users\marcus\Desktop\USP\AERODESIGN\MIKE 2015\ASAS\" & nome, FileFormat:=xlTextWindows, ConflictResolution:=False Set NovoArquivoXLS = Nothing End Sub ainda a aba "asa.in" da pasta "kkk.xlsm" continua sendo excluida. Será que isso tem a ver com o comando "Sheets("asa.in").Copy Before:=Workbooks("1.xlsm").Sheets(1)" ? Abraço
  6. Minoso, Sub ExecutarSalvarTXT()Dim NovoArquivoXLS As WorkbookDim nome As StringApplication.DisplayAlerts = FalseSheets("asa.in").Selectnome = Cells(1, 1).Value 'Cria um novo arquivo excel Set NovoArquivoXLS = Application.Workbooks.Add ActiveSheet.Name = nome ActiveWorkbook.SaveAs ("C:\Users\marcus\Desktop" & "\" & nome), xlOpenXMLWorkbookMacroEnabled 'Copia a planilha para o novo arquivo criado Windows("kkk.xlsm").Activate Sheets("asa.in").Select Sheets("asa.in").Copy Before:=Workbooks("1.xlsm").Sheets(1) Windows("1.xlsm").Activate 'Salva o arquivoActiveWorkbook.SaveAs Filename:="C:\Users\marcus\Desktop\\" & nome, FileFormat:=xlTextWindows, ConflictResolution:=FalseEnd Sub o código esta assim agora. Ele não abre mais o 1.txt nem fecha mais a o aquivo kkk.xlsm, mas ele exclui a aba "asa.in" do "kkk.xlsm". Você sabe o porque? Obrigado
  7. Estou usando esse código: Sub ExecutarSalvarTXT()Dim NovoArquivoXLS As WorkbookDim nome As StringApplication.DisplayAlerts = FalseSheets("asa.in").Selectnome = Cells(1, 1).Value 'Cria um novo arquivo excel Set NovoArquivoXLS = Application.Workbooks.Add ActiveSheet.Name = nome ActiveWorkbook.SaveAs ("C:\Users\marcus\Desktop" & "\" & nome), xlOpenXMLWorkbookMacroEnabled 'Copia a planilha para o novo arquivo criado Windows("kkk.xlsm").Activate Sheets("asa.in").Select Sheets("asa.in").Copy Before:=Workbooks("1.xlsm").Sheets(1) 'Salva o arquivoActiveWorkbook.SaveAs Filename:="C:\Users\marcus\Desktop\" & nome, FileFormat:=xlTextWindows, ConflictResolution:=False NovoArquivoXLS.Close Set NovoArquivoXLS = Nothing Application.DisplayAlerts = False ActiveWindow.SelectedSheets.Delete End Sub No entanto, o arquivo original (kkk.xlsm) fecha quando o nome.txt é criado e esse nome.txt abre (como uma planilha do excel). Queria saber como faço para criar o txt e nada acontecer (não abrir o txt e nem fechar o original (kkk.xlsm)) Obrigado! Marcus
  8. Já consegui resposta para a dúvida!! Na verdade parece estar tudo certo mesmo! tentei num arquivo novo e deu certo!
  9. Olá novamente, pessoal! Estou tentando aprender a copiar e colar uma pasta (e todos os documentos que estiverem dentro dela) através de VBA. No entanto, como vou copiar essa pasta no mesmo local da "original", gostaria de alterar o nome de acordo com os nomes em uma planilha. Para começar, estou usando o seguinte código: Sub copiarpasta()Dim fso As New FileSystemObjectDim name As StringFor i = 1 To 5Cells(i, 1).Value = iname = Cells(i, 1).Valuefso.CopyFolder "C:\Users\marcus\Desktop\pastadesejada", "C:\Users\marcus\Desktop\ && name"Next iEnd Sub No entanto, quando vou rodar a macro, recebo a seguinte mensagem: Erro de compilação : tipo definido pelo usuário não definido. Já procurei em diversos sites e a única coisa que encontrei foi para ir em referências e adicionar algumas opções, mas nada até agora adiantou. Também tenho a dúvida de como fazer o nome contido na célula x virar parte do nome da pasta! Obrigado! Marcus
  10. E aí, Pessoal! Estou com um problema na minha planilha: Tenho vários for (um dentro do outro), mas gostaria que caso uma situação não acontecesse, o for pulasse para a próxima iteração. Por exemplo: For x to y For k to n For j to p if tanana then tanana end if . . . if Cells(1,2) = 0 then não fazer nada (pular para o próximo for) end if next j next k next x end end end Valeu!
  11. Sub SalvarComoTXT() UserForm1.Show End Sub Sub ExecutarSalvarTXT(mPlan As Worksheet, mPathSave As String) Dim NovoArquivoXLS As Workbook Set NovoArquivoXLS = Application.Workbooks.Add mPlan.Copy Before:=NovoArquivoXLS.Sheets(1) ActiveWorkbook.SaveAs Filename:=Application.GetSaveAsFilename MsgBox "Novo arquivo salvo em: " & mPathSave & "\" & mPlan.Name & ".txt", vbInformation End Sub Já resolvi, Minoso! Tinha apagado o "NovoArquivoXLS.Close" do código! Obrigado pela Ajuda! Abraço
  12. Obrigado, Minoso! Só que depois que salva, ele abre esse txt que salvei numa planilha. Tem como tirar isso? Abraço
  13. Pessoal, estou utilizando o código desse site para exportar as abas para TXT (http://www.exceldoseujeito.com.br/2010/12/22/macro-para-salvar-uma-planilha-xls-em-txt/) : Módulo1 01 Sub SalvarComoTXT() 02 UserForm1.Show 03 End Sub 04 05 Sub ExecutarSalvarTXT(mPlan As Worksheet, mPathSave As String) 06 Dim NovoArquivoXLS As Workbook 07 08 'Cria um novo arquivo excel 09 Set NovoArquivoXLS = Application.Workbooks.Add 10 11 'Copia a planilha para o novo arquivo criado 12 mPlan.Copy Before:=NovoArquivoXLS.Sheets(1) 13 14 'Salva o arquivo 15 Application.DisplayAlerts = False 16 NovoArquivoXLS.SaveAs mPathSave & "\" & mPlan.Name & ".txt", _ 17 FileFormat:=xlText, CreateBackup:=False 18 19 NovoArquivoXLS.Close 20 Set NovoArquivoXLS = Nothing 21 Application.DisplayAlerts = True 22 23 MsgBox "Novo arquivo salvo em: " & mPathSave & "\" & mPlan.Name & ".txt", vbInformation 24 25 End Sub UserForm1 view source print? 01 Private Sub CommandButton1_Click() 02 03 'Chama a rotina para salvar como txt 04 'Será salvo um novo arquivo txt com base na planilha seleciona na lista de opções 05 Call ExecutarSalvarTXT(Sheets(lstPlanilhas.Text), ThisWorkbook.Path) 06 07 Unload Me 'Fecha o form 08 09 End Sub 10 11 Private Sub UserForm_Initialize() 12 13 'Chama a rotina para preencher a lista das planilha disponíveis no arquivo 14 Call PreencheLista 15 16 End Sub 17 18 Private Sub PreencheLista() 19 Dim sht As Worksheet 20 21 lstPlanilhas.Clear 22 23 For Each sht In ThisWorkbook.Worksheets 24 If sht.Name <> "Principal" Then 'Não exibe a planilha Principal 25 lstPlanilhas.AddItem sht.Name 26 End If 27 Next sht 28 29 End Sub O código é excelente para o que eu preciso. No entanto, queria saber no que devo alterá-lo para que ele não salve automaticamente o arquivo exportado na área de trabalho e com o nome da aba,como ele faz. Queria escolher o destino no arquivo a cada exportação ( e seu nome). Abraços Marcus
  14. Pessoal, estou utilizando o código desse site para exportar as abas para TXT (http://www.exceldoseujeito.com.br/2010/12/22/macro-para-salvar-uma-planilha-xls-em-txt/) : Módulo1 01 Sub SalvarComoTXT()02 UserForm1.Show03 End Sub04 05 Sub ExecutarSalvarTXT(mPlan As Worksheet, mPathSave As String)06 Dim NovoArquivoXLS As Workbook07 08 'Cria um novo arquivo excel09 Set NovoArquivoXLS = Application.Workbooks.Add10 11 'Copia a planilha para o novo arquivo criado12 mPlan.Copy Before:=NovoArquivoXLS.Sheets(1)13 14 'Salva o arquivo15 Application.DisplayAlerts = False16 NovoArquivoXLS.SaveAs mPathSave & "\" & mPlan.Name & ".txt", _17 FileFormat:=xlText, CreateBackup:=False18 19 NovoArquivoXLS.Close20 Set NovoArquivoXLS = Nothing21 Application.DisplayAlerts = True22 23 MsgBox "Novo arquivo salvo em: " & mPathSave & "\" & mPlan.Name & ".txt", vbInformation24 25 End Sub UserForm1 view source print? 01 Private Sub CommandButton1_Click()02 03 'Chama a rotina para salvar como txt04 'Será salvo um novo arquivo txt com base na planilha seleciona na lista de opções05 Call ExecutarSalvarTXT(Sheets(lstPlanilhas.Text), ThisWorkbook.Path)06 07 Unload Me 'Fecha o form08 09 End Sub10 11 Private Sub UserForm_Initialize()12 13 'Chama a rotina para preencher a lista das planilha disponíveis no arquivo14 Call PreencheLista15 16 End Sub17 18 Private Sub PreencheLista()19 Dim sht As Worksheet20 21 lstPlanilhas.Clear22 23 For Each sht In ThisWorkbook.Worksheets24 If sht.Name <> "Principal" Then 'Não exibe a planilha Principal25 lstPlanilhas.AddItem sht.Name26 End If27 Next sht28 29 End Sub O código é excelente para o que eu preciso. No entanto, queria saber no que devo alterá-lo para que ele não salve automaticamente o arquivo exportado na área de trabalho como ele faz. Queria escolher o destino no arquivo a cada exportação. Abraços Marcus
  15. Obrigado por responder, Minoso! Desculpe a ignorância, mas não entendi ao certo o que o comando activecell.column faz. Pra questão da célula estar pintada de vermelho ou não, pensei em colocar um IF pra isso. Algo tipo: For i = 1 To contacoluna If Cells(1,n).interior.color = rgbred then Sheets.Add After:=ActiveSheet Sheets("Matriz").Select nome = ActiveCell.Offset(0, contacoluna - i).Value ActiveSheet.Next.Select ActiveSheet.Name = nome Sheets("Matriz").Select Next i end if End Sub Mas não sei se funcionaria corretamente. Abraços PS: Aparentemente deu certo este IF dentro do seu código. Mas se puder explicar como funciona o Activecell.column eu agradeceria muito! Abraços PS2: Modifiquei um pouco seu código pois em outra macro ja obtinha o número de células ocupadas na linha 1 (o Range("a24") : Sub Nova_Aba() Dim nome As String Application.ScreenUpdating = False For i = 1 To Range("a24") If Cells(1, i).Interior.Color = rgbRed Then Sheets.Add After:=ActiveSheet Sheets("Plan1").Select nome = Cells(1, i).Value Range("c20").Value = nome ActiveSheet.Next.Select ActiveSheet.Name = nome Sheets("Plan1").Select End If Next i End Sub Obrigado mesmo pela Ajuda! Abraços
  16. E aí, pessoal? Tudo bem? Estou começando agora a programar em VBA e estou com dificuldade em uma parte: preciso criar novas abas de acordo com a quantidade de células pintadas de vermelho que estão na linha 1 na aba principal. Cada aba receberia o nome que estivesse nesta célula. Resumindo: o programa tem que analisar a primeira linha da aba principal e cada vez que encontrar uma célula vermelha deve abrir uma nova aba e nomear esta aba com o texto da célula em questão. Abraços Marcus

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...